////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                                            //
//                                                         WNProject                                                          //
//                                                                                                                            //
//            This file is distributed under the BSD 2-Clause open source license. See License.txt for details.               //
//                                                                                                                            //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef __WN_FIBERS_CONFIG_H__
#define __WN_FIBERS_CONFIG_H__

#include "WNCore/inc/WNCore.h"

#ifdef _WN_LINUX
    #include <ucontext.h>

#define _WN_FIBER_USE_LIBRARIES

    #define WN_FIBER_T                                      ucontext_t
    #define WNALLOCATE_FIBER(_fiber, _stack, _size)        getcontext(&_fiber); _fiber.uc_stack.ss_sp = _stack; _fiber.uc_stack.ss_size = _size; _fiber.uc_link = WN_NULL
    #define WN_INITIALIZE_FIBER(_fiber, _function, _data)   makecontext(&_fiber, **_function, 1, _data)
    #define WN_CURRENT_FIBER(_fiber)                        getcontext(&_fiber)
    #define WN_SWITCH_FIBERS(_old, _new)                    swapcontext(&_old, &_new)
#endif

#define _WN_FIBER_VERIFY_STACK

#endif // __WN_FIBER_CONFIG_H__